# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass si-insert-waitcnts  %s -o - | FileCheck %s

# Ensure we insert waitcnts after any meta instructions at the start of
# non-kernel functions. Without this, the inserted waitcnts can affect e.g. the
# PC ranges covered by CFI and debug values.

---
# CHECK-LABEL: name: skip_implicit_def{{$}}
# CHECK: IMPLICIT_DEF
# CHECK: S_WAITCNT
name: skip_implicit_def
machineFunctionInfo:
body: |
  bb.0:
    $sgpr0 = IMPLICIT_DEF
...
---
# CHECK-LABEL: name: skip_kill{{$}}
# CHECK: KILL
# CHECK: S_WAITCNT
name: skip_kill
machineFunctionInfo:
body: |
  bb.0:
    KILL $sgpr0
...
---
# CHECK-LABEL: name: skip_cfi{{$}}
# CHECK: CFI_INSTRUCTION
# CHECK: S_WAITCNT
name: skip_cfi
machineFunctionInfo:
body: |
  bb.0:
    CFI_INSTRUCTION undefined $sgpr0
...
---
# CHECK-LABEL: name: skip_eh_label{{$}}
# CHECK: EH_LABEL
# CHECK: S_WAITCNT
name: skip_eh_label
machineFunctionInfo:
body: |
  bb.0:
    EH_LABEL 0
...
---
# CHECK-LABEL: name: skip_gc_label{{$}}
# CHECK: GC_LABEL
# CHECK: S_WAITCNT
name: skip_gc_label
machineFunctionInfo:
body: |
  bb.0:
    GC_LABEL 0
...
---
# CHECK-LABEL: name: skip_dbg_value{{$}}
# CHECK: DBG_VALUE
# CHECK: S_WAITCNT
name: skip_dbg_value
machineFunctionInfo:
body: |
  bb.0:
    DBG_VALUE 0
...
---
# CHECK-LABEL: name: skip_dbg_label{{$}}
# CHECK: DBG_LABEL
# CHECK: S_WAITCNT
name: skip_dbg_label
machineFunctionInfo:
body: |
  bb.0:
    DBG_LABEL 0
...
---
# CHECK-LABEL: name: skip_lifetime_start{{$}}
# CHECK: LIFETIME_START
# CHECK: S_WAITCNT
name: skip_lifetime_start
machineFunctionInfo:
body: |
  bb.0:
    LIFETIME_START 0
...
---
# CHECK-LABEL: name: skip_lifetime_end{{$}}
# CHECK: LIFETIME_END
# CHECK: S_WAITCNT
name: skip_lifetime_end
machineFunctionInfo:
body: |
  bb.0:
    LIFETIME_END 0
...
